package com.xiaoshuidi.cloud.module.contract.controller.admin.contract.vo;

import com.xiaoshuidi.cloud.framework.common.pojo.PageParam;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.ToString;

import java.math.BigDecimal;
import java.time.LocalDate;

/**
 * 管理后台 - 租客合同分页 Request VO
 */
@Schema(description = "管理后台 - 租客合同分页 Request VO")
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
public class ContractPageReqVO extends PageParam {

    /**
     * 合同编号
     */
    @Schema(description = "合同编号")
    private String contractNo;

    /**
     * 线下合同编号
     */
    @Schema(description = "线下合同编号")
    private String offlineNo;

    /**
     * 电子合同编号
     */
    @Schema(description = "电子合同编号")
    private String electronicNo;

    /**
     * 合同类型 paper纸质合同 | electronic 电子合同
     */
    @Schema(description = "合同类型 paper纸质合同 | electronic 电子合同")
    private String contractSort;

    /**
     * 合同分类 normal 普通合同 | segmented 分段合同 |rentfree 免租期合同
     */
    @Schema(description = "合同分类 normal 普通合同 | segmented 分段合同 |rentfree 免租期合同")
    private String contractType;

    /**
     * 是否按自然月 0 默认非自然月 1 自然月
     */
    @Schema(description = "是否按自然月 0 默认非自然月 1 自然月")
    private Integer naturalMonthOrder;

    /**
     * 关联公寓
     */
    @Schema(description = "关联公寓")
    private Long apartmentId;

    /**
     * 公寓名称
     */
    @Schema(description = "公寓名称")
    private String apartmentName;

    /**
     * 关联房间
     */
    @Schema(description = "关联房间")
    private Long roomId;

    /**
     * 房间名称
     */
    @Schema(description = "房间名称")
    private String roomName;

    /**
     * 开始日期
     */
    @Schema(description = "开始日期")
    private LocalDate startTime;

    /**
     * 结束日期
     */
    @Schema(description = "结束日期")
    private LocalDate endTime;

    /**
     * 实际结束日期
     */
    @Schema(description = "实际结束日期")
    private LocalDate actualEndTime;

    /**
     * 月租金
     */
    @Schema(description = "月租金")
    private BigDecimal monthRent;

    /**
     * 总租金
     */
    @Schema(description = "总租金")
    private BigDecimal totalRent;

    /**
     * 物业费
     */
    @Schema(description = "物业费")
    private BigDecimal propertyAmount;

    /**
     * 押金
     */
    @Schema(description = "押金")
    private BigDecimal deposit;

    /**
     * 原押金
     */
    @Schema(description = "原押金")
    private BigDecimal oldDeposit;

    /**
     * 付几  |  付款周期
     */
    @Schema(description = " 付几  |  付款周期")
    private Integer payMethodF;

    /**
     * 压几
     */
    @Schema(description = "压几")
    private Integer payMethodY;

    /**
     * 收租类型 advanced  提前收租天 | fixed 固定当月日期 日 | prefixed 固定上月日期 日,
     */
    @Schema(description = "收租类型 advanced  提前收租天 | fixed 固定当月日期 日 | prefixed 固定上月日期 日,")
    private String rentPayWay;

    /**
     * 收租类型日
     */
    @Schema(description = "收租类型日")
    private Integer advancedDays;

    /**
     * 优惠类型 cycle 周期性优惠 | once 一次性优惠
     */
    @Schema(description = "优惠类型 cycle 周期性优惠 | once 一次性优惠")
    private String discountSort;

    /**
     * 优惠方式 rate 优惠比例 % | amount 优惠金额 元/月 | once 优惠金额 元
     */
    @Schema(description = "优惠方式 rate 优惠比例 % | amount 优惠金额 元/月 | once 优惠金额 元")
    private String discountType;

    /**
     * 一次性优惠金额计入首期或末期账单 first 计入首期账单 | last 计入末期账单
     */
    @Schema(description = "一次性优惠金额计入首期或末期账单 first 计入首期账单 | last 计入末期账单")
    private String discountOrder;

    /**
     * 优惠值
     */
    @Schema(description = "优惠值")
    private BigDecimal discountValue;

    /**
     * 叠加优惠类型：周期性 cycle | 一次性 once
     */
    @Schema(description = "叠加优惠类型：周期性 cycle | 一次性 once")
    private String extraDiscountSort;

    /**
     * 周期性优惠优惠方式：按账期（order）,按月租金(rent)
     */
    @Schema(description = "周期性优惠优惠方式：按账期（order）,按月租金(rent)")
    private String extraDiscountType;

    /**
     * 一次性优惠计入账单：计入首次(first), 计入末次(last)
     */
    @Schema(description = "一次性优惠计入账单：计入首次(first), 计入末次(last)")
    private String extraDiscountOrder;

    /**
     * 周期性优惠值
     */
    @Schema(description = "周期性优惠值")
    private BigDecimal extraDiscountValue;

    /**
     * 合同状态 pending 待审核 | reject 已驳回 | no_signed 待签约 | no_effective  待生效 | active 已生效 | signed_aging   已失效|Completed 完成
     */
    @Schema(description = "合同状态 pending 待审核 | reject 已驳回 | no_signed 待签约 | no_effective  待生效 | active 已生效 | signed_aging   已失效|Completed 完成")
    private String status;

    /**
     * 签约状态 0 未知 |1 待签约| 2 已签约 | 3 已取消
     */
    @Schema(description = "签约状态 0 未知 |1 待签约| 2 已签约 | 3 已取消")
    private Integer signed;

    /**
     * 在线签约状态 0 未签约 1已签约
     */
    @Schema(description = "在线签约状态 0 未签约 1已签约")
    private Integer signStatus;

    /**
     * 签约时间
     */
    @Schema(description = "签约时间")
    private LocalDate signedTime;

    /**
     * 签约图片
     */
    @Schema(description = "签约图片")
    private String signedPicture;

    /**
     * 证件附件地址
     */
    @Schema(description = "证件附件地址")
    private String certificateUrl;

    /**
     * 合同附件地址
     */
    @Schema(description = "合同附件地址")
    private String contractUrl;

    /**
     * 来源合同ID  续租 | 换房
     */
    @Schema(description = "来源合同ID  续租 | 换房")
    private Long fromId;

    /**
     * 客户类型 personal 个人客户 | company 企业客户
     */
    @Schema(description = "客户类型 personal 个人客户 | company 企业客户")
    private String customerType;

    /**
     * 租客名
     */
    @Schema(description = "租客名")
    private String customerName;

    /**
     * 租客手机号
     */
    @Schema(description = "租客手机号")
    private String customerPhone;

    /**
     * 紧急联系人姓名
     */
    @Schema(description = "紧急联系人姓名")
    private String emergencyContactName;

    /**
     * 紧急联系人手机号
     */
    @Schema(description = "紧急联系人手机号")
    private String emergencyContactPhone;

    /**
     * 紧急联系人关系
     */
    @Schema(description = "紧急联系人关系")
    private String emergencyContactRelationship;

    /**
     * 证件类型
     */
    @Schema(description = "证件类型")
    private String customerIdType;
    /**
     * 证件号码
     */
    @Schema(description = "证件号码")
    private String customerIdNumber;

    /**
     * 国籍
     */
    @Schema(description = "国籍")
    private String customerNationality;

    /**
     * 乙方联系地址
     */
    @Schema(description = "乙方联系地址")
    private String renterAddress;

    /**
     * 租客邮编
     */
    @Schema(description = "租客邮编")
    private String renterPostalCode;

    /**
     * 租客邮箱
     */
    @Schema(description = "租客邮箱")
    private String renterEmail;

    /**
     * 银行卡号
     */
    @Schema(description = "银行卡号")
    private String customerCreditCard;

    /**
     * 所属银行
     */
    @Schema(description = "所属银行")
    private String customerBank;

    /**
     * 所属支行
     */
    @Schema(description = "所属支行")
    private String customerBankArea;

    /**
     * 租客学历
     */
    @Schema(description = "租客学历")
    private String customerEducation;

    /**
     * 租客岗位
     */
    @Schema(description = "租客岗位")
    private String customerPost;

    /**
     * 企业客户
     */
    @Schema(description = "企业客户")
    private Integer customerCompanyId;

    /**
     * 企业客户费用承担方式
     */
    @Schema(description = "企业客户费用承担方式")
    private Integer orderShareMethod;

    /**
     * 受理编号
     */
    @Schema(description = "受理编号")
    private String customerAcceptanceNo;

    /**
     * 乙方居住类型 1 单身合租 | 2 非单身合租
     */
    @Schema(description = "乙方居住类型 1 单身合租 | 2 非单身合租 ")
    private String customerHabitancyType;

    /**
     * 来源于哪份企业合同
     */
    @Schema(description = "来源于哪份企业合同")
    private Long companyContractId;

    /**
     * 关联业主委托合同 默认0 不关联 1 关联
     */
    @Schema(description = "关联业主委托合同 默认0 不关联 1 关联")
    private Integer entrustContractId;

    /**
     * 是否与业主直接签署
     */
    @Schema(description = "是否与业主直接签署")
    private Integer isOwner;

    /**
     * 合同签约发起人-甲方
     */
    @Schema(description = "合同签约发起人-甲方")
    private Integer signerId;

    /**
     * 签约人姓名-甲方
     */
    @Schema(description = "签约人姓名-甲方")
    private String signerName;

    /**
     * 客户来源 1 来电 |2 58同城 | 3 赶集网 | 4 安居客 | 5 官网预约 | 6 微信 | 7 自来客 | 8 转介绍 | 9 中介 | 10 其他 |11 房天下 | 12 豆瓣 | 13 百姓网 | 14 闲鱼 | 15 微博 | 16 官网在线 | 17 运营管理 | 18 手机APP | 19 贝壳
     */
    @Schema(description = "客户来源 1 来电 |2 58同城 | 3 赶集网 | 4 安居客 | 5 官网预约 | 6 微信 | 7 自来客 | 8 转介绍 | 9 中介 | 10 其他 |11 房天下 | 12 豆瓣 | 13 百姓网 | 14 闲鱼 | 15 微博 | 16 官网在线 | 17 运营管理 | 18 手机APP | 19 贝壳 ")
    private String source;

    /**
     * 网签备案状态  0 未网签备案 | 1 已网签备案 | 2 已退租备案 | 3 撤销合同备案
     */
    @Schema(description = "网签备案状态  0 未网签备案 | 1 已网签备案 | 2 已退租备案 | 3 撤销合同备案")
    private Integer recordStatus;

    /**
     * 网签续租备案确认状态 0 续租备案未确认 | 1 续租备案已确认
     */
    @Schema(description = "网签续租备案确认状态 0 续租备案未确认 | 1 续租备案已确认")
    private Integer renewRecordStatus;

    /**
     * 优惠券推荐老客户手机号
     */
    @Schema(description = "优惠券推荐老客户手机号")
    private String referrerPhone;

    /**
     * 0未发券,1已发券
     */
    @Schema(description = "0未发券,1已发券")
    private Integer voucherIssuanceStatus;

    /**
     * 是否免租
     */
    @Schema(description = "是否免租")
    private Integer hasRentfree;

    /**
     * 退租类型
     * */
    @Schema(description = "退租类型")
    private String evictionType;
    /**
     * 退租时间
     * */
    @Schema(description = "退租时间")
    private LocalDate evictionTime;

    /**
     * 退租原因
     */
    @Schema(description = "退租原因")
    private String evictionReason;

    /**
     * 备注
     */
    @Schema(description = "备注")
    private String remark;

    /**
     * 创建时间
     */
    @Schema(description = "创建时间")
    private LocalDate createTime;

}
